package es.ugr.beequizz.services.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import es.ugr.beequizz.bean.ClasificacionBean;
import es.ugr.beequizz.bean.InformacionPartidaBean;
import es.ugr.beequizz.bean.MisPartidasBean;
import es.ugr.beequizz.bean.PartidaBean;
import es.ugr.beequizz.bean.PuntuacionBean;
import es.ugr.beequizz.dao.PartidaDAO;
import es.ugr.beequizz.model.Pregunta;
import es.ugr.beequizz.services.PartidaService;

@Service
public class PartidaServiceImpl implements PartidaService {
	
	@Autowired
	private PartidaDAO partidaDAO;
	
	public Long crearPartida(Long usuarioId, Long juegoId) {
		
		Long idPartida = partidaDAO.crearPartida(usuarioId, juegoId);
		
		return idPartida;
	}

	public void resultadoPartida(Long partidaId, Long usuarioId, Long puntuacionTotal) {
		
		partidaDAO.resultadoPartida(partidaId, usuarioId, puntuacionTotal);
		
	}

	public void partidaMultijugador(Long idPartida, List<Long> ids) {

		for (Long idJugador : ids) {
			Long idSiguiente;
			int index = ids.indexOf(idJugador);
			
			if (index + 1 != ids.size()) {
				idSiguiente = ids.get(index + 1);
			} else {
				idSiguiente = ids.get(0); 
			}
			
			partidaDAO.partidaMultijugador(idPartida, idJugador, idSiguiente);
		}
		
	}

	public void preguntasPartida(Long partidaId, List<Pregunta> preguntasBean) {
		for (Pregunta pregunta : preguntasBean){
			
			partidaDAO.preguntaPartida(partidaId, pregunta.getId());
		}
	}

	public void partidaTerminada(Long idPartida) {
		
		partidaDAO.partidaTerminada(idPartida);
	}

	public List<PartidaBean> recuperarPartidas(Long idUsuario) {
		
		return partidaDAO.recuperarPartidas(idUsuario);
	}

	public void insertarUnaPregunta(Long preguntaId, Long partidaId,
			Long usuarioId) {
		partidaDAO.insertarUnaPregunta(preguntaId, partidaId, usuarioId);
		
	}

	public Long recuperarPuntuacion(Long partidaId, Long usuarioId) {
		return partidaDAO.recuperarPuntuacion(partidaId, usuarioId);
	}

	public void puntuacion(Long partidaId, Long usuarioId,
			Long puntuacion) {
		partidaDAO.puntuacion(partidaId, usuarioId, puntuacion);
		
	}

	public Boolean recuperarEstadoPartida(Long partidaId) {
		
		return partidaDAO.recuperarEstadoPartida(partidaId);
	}

	public List<InformacionPartidaBean> recuperarPartidasEnCurso(
			Long idUsuario, Long idJuego) {
		
		return partidaDAO.recuperarPartidasEnCurso(idUsuario,idJuego);
	}

	public InformacionPartidaBean recuperarInformacionPartida(Long idPartida) {
		return partidaDAO.recuperarInformacionPartida(idPartida);
	}

	public Long crearPartida(Long jugadorId, Long juegoId, Long temaId,
			Long dificultadId) {
		return partidaDAO.crearPartida(jugadorId, juegoId, temaId, dificultadId);
	}

	public List<PuntuacionBean> recuperarPuntuacion(Long partidaId) {
		return partidaDAO.recuperarPuntuacion(partidaId);
	}

	public List<String> recuperarListaParticipantes(Long idPartida) {
		
		return partidaDAO.recuperarListaParticipantes(idPartida);
	}

	@Override
	public List<MisPartidasBean> recuperarResultadosMisPartidas(Long jugadorId) {
		return partidaDAO.recuperarResultadosMisPartidas(jugadorId);
	}

	@Override
	public List<ClasificacionBean> recuperarClasificacion(Long juegoId,
			Long asignaturaId, Long dificultadId) {
		return partidaDAO.recuperarClasificacion(juegoId, asignaturaId, dificultadId);
	}

	@Override
	public void registrarJugador(long idPartida, long idUsuario) {
		this.partidaDAO.partidaMultijugador(idPartida, idUsuario, null);
	}




}
